<?php

class game{
    
    function __construct() {
       
    }
    
    function move(&$v_input){
        $action=$v_input['action'];
        switch($action){
            case "up":
                $this->up($v_input);
                break;
            case "down":
                $this->down($v_input);
                break;
            case "left":
                $this->left($v_input);
                break;
            case "right":
                $this->right($v_input);
                break;
        }
        
        $this->check($v_input);
    }
    
    
    function up(&$v_input){
        $this->get_lengthways_data($v_input);
        $this->push($v_input);
    }
    
    function down(&$v_input){
        
    }
    
    function left(&$v_input){
        
    }
    
    function right(&$v_input){
        
    }
    
    function add_data(&$v_input){
        
    }
    
    function check(&$v_input){
        
    }
    
    
    function get_lengthways_data(&$v_input){
        
        $v_input['lengthways_data']=array();
        for($i=0;$i<count($v_input['data']);$i++){
           for($j=0;$j<count($v_input['data'][$i]);$j++){
                $v_input['lengthways_data'][$j][$i]=&$v_input['data'][$i][$j];
           }
        }

        return;
    }
    
     function push(&$v_input){
         
        $action=$v_input['action'];
        
        if($action=="up" ||  $action=="down"){
            $deal_data_name="lengthways_data";
            $deal_data=$v_input['lengthways_data'];
        }else{
            $deal_data_name="data";
            $deal_data=$v_input['data'];
        }

        if($action=="up" || $action=="left"){
            $start=1;
        }else{
            $start=-1;
        }
        
    for($i=0;$i<count($deal_data);$i++){
            if(array_sum($deal_data[$i])==0){
                    continue;
            }

            $result=0;
            if($start==1){
                //相邻的是否有相同的数

                for($m=0;$m<count($deal_data[$i]);$m++){
                    if($deal_data[$i][$m]==0){
                        continue;
                    }

                    for($n=$m+1;$n<count($deal_data[$i]);$n++){
                        if($deal_data[$i][$m]=$deal_data[$i][$n]){
                            $deal_data[$i][$m]=$deal_data[$i][$m]*2;
                            $deal_data[$i][$n]=0;
                            $result++;
                            break 2;
                        }
                    }
                }

                    //数字移位
                if($result){
                    for($j=0;$j<count($deal_data[$i]);$j++){
                        if($deal_data[$i][$j]>0){
                            continue;
                        }else{
                            for($g=$j+1;$g<count($deal_data[$i]);$g++){
                                if($deal_data[$i][$g]==0){
                                    continue;
                                }else{
                                    $deal_data[$i][$j]=$deal_data[$i][$g];
                                    $deal_data[$i][$g]=0;
                                    break;
                                }
                            }
                        }
                    }
                }
        }else{

            //相邻的是否有相同的数
            for($m=count($deal_data[$i]);$m>0;$m--){
                if($deal_data[$i][$m]==0){
                    continue;
                }

                for($n=$m-1;$n>0;$n--){
                    if($deal_data[$i][$m]=$deal_data[$i][$n]){
                        $deal_data[$i][$m]=$deal_data[$i][$m]*2;
                        $deal_data[$i][$n]=0;
                        $result++;
                        break 2;
                    }
                }
            }

            //数字移位
            if($result){
                for($j=count($deal_data[$i]);$j>0;$j--){
                    if($deal_data[$i][$j]>0){
                        continue;
                    }else{
                        for($g=$j-1;$g>0;$g--){
                            if($deal_data[$i][$g]==0){
                                continue;
                            }else{
                                $deal_data[$i][$j]=$deal_data[$i][$g];
                                $deal_data[$i][$g]=0;
                                break;
                            }
                        }
                    }
                }
            }

        }
    }   
    
    $v_input["{$deal_data_name}"]=$deal_data;
    return;
}
    

    function __destruct() {
        
    }
    
    
    
}

$v_input['action']="up";
$v_input['data']=array(array(0,0,0,0),array(0,0,0,0),array(2,0,0,0),array(2,0,0,0));

$a=new game();
$a->move($v_input);


?>
